package rs.busadzije.bots;


import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.StringFilter;
import org.htmlparser.tags.OptionTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;


public class GSPNS implements BotI{

	/**
	 * Mali test primer
	 * */
	public static void main(String[] args) {
		BotI t = new GSPNS();
		String[][] rezultat = t.procitajPodatke();

		for (String[] strings : rezultat) {
			for (String string : strings) {
				System.out.print(string +", ");
			}
			System.out.println();
		}
	}

	//PILE - test da vidim da li ce da snimi podatke na SVN, posto mi nije trazio username i sifru za checkout....mozda je u read-only
	@Override
	public String[][] procitajPodatke() {

		String[][] rezultat = null;

		try {

			System.out.println("\n\tUcitavamo pocetnu stranicu...");
			Parser parser = new Parser("http://gspns.rs/redvoznje.php?rv=rvm");
			System.out.println("\n\tStranica ucitana!");
			//parsiramo stranicu
			NodeList nl = parser.parse(new HasAttributeFilter("name", "linija[]"));
			Tag tag = (Tag) nl.elementAt(0);

			//izvlacimo gradove iz stranice
			SelectTag slGradovi = (SelectTag) tag;			
			//System.out.println("Ukupno gradova: "+slGradovi.getChildCount());			
			OptionTag otGradovi[] = slGradovi.getOptionTags();
			String[] gradovi = new String[otGradovi.length];

			//zauzimamo potrebno mesto za rezultat
			rezultat = new String[gradovi.length][9];

			for (int i = 0; i < otGradovi.length; i++) {
				String grad = otGradovi[i].getValue();

				//vadimo danasnji datum
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				String currentDate = sdf.format(Calendar.getInstance().getTime());

				//ucitavamo stranizu za polaske
				System.out.println("\n\tUcitavamo stranicu za grad: " + grad + "...");
				parser = new Parser("http://gspns.rs/redvoznje.php?zadan="+currentDate+"&pd=p&rv=rvm&linija[]="+grad);
				System.out.println("\n\tStranica ucitana!");

				//pronalazimo tabalu preko vrednosti, posto nema NAME
				nl = parser.parse(new StringFilter("Polasci za "));
				tag = (Tag) nl.elementAt(0).getParent();

				//pozivamo 2 puta, da bi smo dosli do tabele
				tag = (Tag) tag.getParent();
				TableTag ttTabela = (TableTag) tag.getParent();

				//prolazimo kroz redove pocevsi od drugog, jer oni sadrze podatke
				for (int j = 2; j < ttTabela.getRowCount(); j++) {
					TableRow trRed = ttTabela.getRow(j);
					//ttTabela.get
					TableColumn[] tcKolone = trRed.getColumns();

					String vremePolaska = tcKolone[0].getChild(0).toPlainTextString(); 
					String kilometraza = tcKolone[1].getChild(0).toPlainTextString(); ;
					String trajanje = tcKolone[2].getChild(0).toPlainTextString(); ;
					String prevoznik = tcKolone[3].getChild(0).toPlainTextString(); ;
					String linija = tcKolone[4].getChild(0).toPlainTextString(); ;
					String peron = tcKolone[5].getChild(0).toPlainTextString(); ;
					String cena = tcKolone[6].getChild(0).toPlainTextString(); ;

					String[] polazak = new String[]{"polazak",grad,vremePolaska,kilometraza,trajanje,prevoznik,linija,peron,cena};
					rezultat[i] = polazak;
					System.out.println(vremePolaska + " , " + kilometraza + " , " + trajanje + " , " + prevoznik + " , " + linija + " , "+ peron + " , " + cena);
				}
			}
			//System.out.println(ttTabela.toHtml());			
			//novi red
			System.out.println();

		} catch (ParserException e) {
			e.printStackTrace();
		}		
		return rezultat;
	}

}
